Skip to content

Admit independent service SVID roles on Gateway receivers - #16364

Merged
agentydragon merged 5 commits into
agentydragon:develfrom
agentydragon-agent:agent/service-svid-gateway
Nov 14, 2026
Merged

agentydragon merged 5 commits into
agentydragon:develfrom
agentydragon-agent:agent/service-svid-gateway

Conversation

@agentydragon-agent

@agentydragon-agent agentydragon-agent commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Add optional exact service-SVID admission to the co-hosted Dispatcher, EnvironmentService, Runtime proxy and Executor. Each receiver has its own grants; Sessions, Environments and Runtime-proxy identities remain movable with the planned binary split. Certificate actors retain separate persisted provenance and wake budgets. Typed delegation uses the effective Identity, never the actor's component grants. Preserve the merged Identity explicit-resume rules and live UID/policy checks.

Stage 3 code and settings only. Deliberately leaves out caller switches, deployment settings, binary extraction, TokenReview and RBAC removal. #16359 has merged, but manifests must not set these keys or certificate paths until these receiver images are pinned. Existing bearer callers continue during the staged rollout; a certificate-bearing request cannot fall back to bearer admission.

Validation: scoped pre-commit passed including complete Gazelle drift. Passed: bbr test //agentplane/runner_gateway:config_test //agentplane/runner_gateway:test_settings //agentplane/runner_gateway/environments/internal/management:unit_test //agentplane/runner_gateway/internal/gateway:gateway_test //agentplane/runner_gateway/dispatcher:store_integration_test //agentplane/runner_gateway/migrations:test_migrations (invocation 9a6c13bb-c9c4-4b5c-b032-a58d46be4baa). After integrating the new Identity lifecycle contract and migration sequencing, bbr test //agentplane/runner_gateway/environments:environments_test //agentplane/runner_gateway/environments/lifecycle:lifecycle_test //agentplane/runner_gateway/migrations:upgrade_integration_test passed (e05a4154-0a1a-4b50-804a-96e2f3e1682e). Deployment tests all passed in 30458d37-c117-4e09-bde2-0f9736b4b92d: //agentplane/system_tests/suites:test_dispatcher (278.6s), //agentplane/system_tests/suites/mcp:test_services (341.1s), //agentplane/system_tests/suites/mcp:test_delegation (200.8s), and //cluster/cdk8s:test_generate_manifests (40.3s). Named settings-library build also passed (82a1c289-c244-4d90-b7c2-a59a23e3768e). System overview includes the role boundaries.

CI found and corrected two integration gaps: ServiceAccount create receipts now retain the existing caller encoding for old replicas and orchestration readers, while service actors use independent attribution; the Gateway method helper lives in the shared test fixture so the queue test compiles. bbr test //agentplane/action_service/orchestration_v1:orchestration_v1_test //agentplane/runner_gateway/environments/internal/management:unit_test //agentplane/runner_gateway/environments:environments_test //agentplane/system_tests/suites/mcp:test_actions passed (a5051868-b8ce-4bcc-9ece-a8e762c55840). Fresh-base checks also passed in 22bcde0e-da5e-4fbd-93b0-289a08fa985a: //agentplane/runner_gateway/internal/gateway:queue_runner_integration_test (32.9s), //agentplane/runner_gateway/internal/gateway:gateway_test (22.2s), and //agentplane/runner_gateway/dispatcher:store_integration_test (70.0s).

Rollback: revert the receiver change before any caller cutover, roll back its image pin, and confirm existing bearer clients and Dispatcher delivery recover. The new migration is additive; retain its columns/table during rollback. After future service-attributed writes begin, do not roll back without accounting for those rows, since old receivers cannot use their new attribution. This PR enables no production service callers.

Questions for Claude

None.

@agentydragon
agentydragon enabled auto-merge (squash) November 14, 2026 07:09
auto-merge was automatically disabled November 14, 2026 07:15

Head branch was pushed to by a user without write access

@agentydragon-agent
agentydragon-agent force-pushed the agent/service-svid-gateway branch from 2450997 to e370478 Compare November 14, 2026 07:15
@agentydragon-agent
agentydragon-agent force-pushed the agent/service-svid-gateway branch from 6bf7dfe to 47574ec Compare November 14, 2026 07:38
@agentydragon
agentydragon enabled auto-merge (squash) November 14, 2026 07:39
@agentydragon
agentydragon merged commit 9a955bd into agentydragon:devel Nov 14, 2026
10 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Visual review for 47574ec5

Request a manual rerun from the CI run page.

Warning

1 target used the latest devel baseline (b6ee69dc) because the PR base published none. Diffs there may include devel drift, not just this PR's changes.

No visual changes among the 1 affected Bazel test target. Open visual review.

agentydragon pushed a commit that referenced this pull request Nov 14, 2026
Explicit `ResumeEnvironment` no longer reserves the shared wake budget,
for direct Pod-bound and service-SVID operator callers and Identity
resume grants. Automatic Dispatcher `RequestWake` alone reserves
`ReserveWakeAttempt`; authorization, operator-stop handling, generation
tokens and optimistic locking retain their existing behavior. This
implements the operator’s 2026-11-14 07:41 UTC decision, “No budget for
explicit resume,” recorded in [plan PR
#16368](#16368) at
`0675c37082`.

`TestExplicitResumeDoesNotReserveWakeBudget` exercises both caller paths
with exhausted and unavailable budget backends and requires successful
resume with zero reservations.
`TestEnvironmentServiceServiceRolesStayMethodScoped` checks a real mTLS
service operator resume succeeds with zero reservations; the
foreign-target Identity grant test also checks zero reservations.
Conflict and stale-token tests retain their coverage, with concurrent
requests synchronized at the Kubernetes patch boundary rather than
inside the budget fake.

Automatic wakes remain bounded:
`TestAutomaticWakeSharesPolicyBudgetAndReportsRetryFacts` still requires
rate limiting with retry facts when exhausted and refusal when the
backend is unavailable; Dispatcher’s
`TestMixedVersionWakeWritersShareCapAndGenerationDedup` and Store
integration tests cover durable shared reservations. Lifecycle SPEC,
README and interface comments now distinguish the two paths.

Validation:

- Changed-file pre-commit and all commit hooks passed (gofumpt applied
formatting first).
- `bbr test
//agentplane/runner_gateway/environments/lifecycle:lifecycle_test
//agentplane/runner_gateway/environments:environments_test
//agentplane/runner_gateway/dispatcher:store_integration_test
//agentplane/system_tests/suites:test_dispatcher --test_output=errors` —
all 4 passed
([45ead54e](https://app.buildbuddy.io/invocation/45ead54e-7d63-4603-837d-3ad3e388ce46));
3 executed, Dispatcher storage integration cached. The full Dispatcher
system suite passed in 228.3s and covers queue, automatic wake, delivery
and replica behavior. Full current-head GitHub CI pending.

Rollout: deploy/pin the Gateway behavior. No settings, manifests, schema
or wire contract changes, so no image-before-config ordering applies.
Independent of the identity-change fence PR #16373. Rollback: revert the
Gateway image pin; explicit resume again uses the existing budget.
Retain current Sandbox generations and budget rows. After Flux applies
the pin, check explicit resume and automatic queued wake, including
normal delivery and wake-budget retry facts.

Deliberately leaves out automatic-wake policy or limit changes,
settings/manifests, storage ownership or service extraction, Runtime
Identity defense, caller-authentication changes, and any new
cross-component call.

Rebased onto `9a955bd3` after Gateway service SVID admission #16364,
preserving its service roles and authentication behavior. Post-rebase
focused validation
([0fd41c23](https://app.buildbuddy.io/invocation/0fd41c23-f01e-45ce-9115-6f0652352163))
passed lifecycle, Dispatcher storage (cached), and the full Dispatcher
system suite (231.9s), but found the newly landed mTLS service-operator
test still asserting an explicit budget reservation. Commit `d63bccb9`
changes that assertion to zero reservations while retaining its
method-scoped authorization and desired-state checks. The corrected `bbr
test //agentplane/runner_gateway/environments:environments_test
--test_output=errors` executed and passed
([3fcea46b](https://app.buildbuddy.io/invocation/3fcea46b-f7c8-40f4-bb2d-b4f8d5f0c93a)).
Changed-file pre-commit and commit hooks passed. Full current-head CI
pending.

Latest rebase: head `9f01bc92f168218eb361383b6dd6c58b81224226` is based
on `a68e0de510d6ea10184705ab453a69259cb85801`, including service-SVID
admission and the system-test root-key renewal correction #16377. The
rebase was conflict-free; range-diff showed unchanged patches, and it
was published with `--force-with-lease`. GitHub confirms this head.
Current-head pre-commit, Nix and artifact/import checks passed; Bazel
and visual review are running, with no reported failures as of
2026-11-14 08:29 UTC. The focused RBE results above remain prior-base
validation. Fresh `origin/devel` is
`6e591f383864ab47d7a9370abb4bd6637f0faee3`; its two additional commits
change image pins and a Dispatcher documentation note, and GitHub
reports this PR mergeable.

## Questions for Claude

None.

---------

Co-authored-by: agentydragon-agent <260791330+agentydragon-agent@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants